昨天分享了特性組合的一般單獨的使用方法,
今天要來分享一下他們的 Combo 連技和相關用到的東西。
把 writable
和 configurable
都設定成 false
,就可以建立出一個不能修改也不能被變更的物件常數。
const obj = {}; // 給個空物件
Object.defineProperty(obj,"a",{
value: 17,
writable: false,
enumerable: true,
configurable: false
});
obj.a; // 17 出現啦~
obj.a = 123;
obj.a; // 17 // 改不了啊!!!!
Object.defineProperty(obj,"a",{
value: 17,
writable: true,
enumerable: true,
configurable: true
}); // TypeError 改不了啊!!!!
如果你想要避免這個 Object 被新增額外的特性怎麼辦?
登登登登登~
你可以使用 Object.preventExtensions(..)
。
const obj ={
a:17
};
Object.preventExtensions(obj);
obj.b = 123;
obj.b; // undefined
假使是非嚴格模式它就默默地失敗了,但如果是嚴格模式他就會噴你 TypeError
。
如何建立一個密封過的物件呢?
什麼意思!? 就是你不准新增任何的特性也不可以刪除既有的特性,但是你唯一能做的事就是修改他的值。Object.seal(..)
,基本上這個就是你丟進去一個Object ,他就幫你呼叫剛剛提的 Object.preventExtensions(..)
和設定configurable
為 false
。
const obj = {
a:17
};
Object.seal(obj);
obj.b = 123;
obj.b; // undefined 不能增加特性
Object.defineProperty(obj,"a",{
value: 16,
writable: true,
enumerable: true,
configurable: true
}); // TypeError 不給改啊!!!
obj.a = 123;
obj.a; // 123 可以改~
不准新增刪除和重新配置該特性,也不能更改值。
基本上就是 Object.seal
+ writable: false
。
const obj = {
a:17,
};
Object.freeze(obj);
obj.b = 123;
obj.b; // undefined 不能增加特性
Object.defineProperty(obj,"a",{
value: 16,
writable: true,
enumerable: true,
configurable: true
}); // TypeError 不給改啊!!!
obj.a = 777;
obj.a; // 17 也不給改啊!!!
你剩下能做的大概就只剩讀取他和對他迭代。
以上是今天的內容
明天倒數兩天啦啦啦!
看起來要讀完這本是涼了xDD
不過物件這章節應該可以結束。
明天主要會講特性的存取一些眉眉角角~
"可能"還有迭代 xD~
感謝您的收看
我們明天見
你所不知道的 JS|範疇與 Closures,this 與物件原型 (You Don't Know JS: this & Object Prototypes))